package hashtable;

/**
 * 什么是哈希表?
   答:哈希表(散列表)是根据关键码的值而直接进行访问的数据结构
      直白来讲其实数组就是一张哈希表
      哈希表中关键码就是数组索引的下标，然后通过下标直接访问数组中的元素
 */

/**
 * 哈希表能解决什么问题?
   答:一般哈希表都是用来快速判断一个元素是否出现在集合中
      例如要查询一个名字是否在这所学校里。
      要枚举的话时间复杂度是O(n)，但如果使用哈希表的话， 只需要O(1)就可以做到。
      我们只需要初始化把这所学校里学生的名字都存在哈希表里，
      在查询的时候通过索引直接就可以知道这位同学在不在这所学校里了。
      将学生姓名映射到哈希表上就涉及到了hash function ，也就是哈希函数。

 */

/**
 * 哈希函数:
   答:哈希函数把学生的姓名直接映射为哈希表上的索引，然后就可以通过查询索引下标快速知道
     哈希函数将hashCode把名字转化为数值，一般hashcode是通过特定的编码方式，将其他数据格式转换为不同数值，

 * 如果hashcode得到的数值大于哈希表的大小怎么办?
   答:对数值做一个取模的操作
 */

/**总结:
    总结一下，当我们遇到了要快速判断一个元素是否出现集合里的时候，就要考虑哈希法。
    但是哈希法也是牺牲了空间换取了时间，因为我们要使用额外的数组，set或者是map来存放数据，才能实现快速的查找。
    如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法！
 */
public class BasicKnowledge {
}
